package com.rui.cn.consumer.web;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.rui.cn.dto.JsonResult;
import com.rui.cn.dto.Pager;
import com.rui.cn.dto.RemotePage;
import com.rui.cn.dto.TreeDto;
import com.rui.cn.entity.system.SysMenu;
import com.rui.cn.entity.system.SysPermission;
import com.rui.cn.entity.system.SysRole;
import com.rui.cn.feignservice.*;
import com.rui.cn.util.DateUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import java.util.*;

/**
*@描述：角色管理控制器类
*@创建人：[zhang]
*@类名：RoleController
*@时间：2018/4/28 0028-下午 15:03
**/

@RestController
@RequestMapping(value = "/role")
public class RoleController {
    @Autowired
    private SysRoleService sysRoleService;
    @Autowired
    private SysMenuService sysMenuService;
    @Autowired
    private SysRoleMenuService sysRoleMenuService;
    @Autowired
    private SysPermissionService sysPermissionService;
    @Autowired
    private SysRolePermissionService sysRolePermissionService;
    /**
     *@ 描述：角色管理页面
     *@ 方法名：toRole
     *@ 参数：[]
     *@ 返回值类型：org.springframework.web.servlet.ModelAndView
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/28 0028-下午 15:06
     **/
    @RequestMapping(value = "/toRole")
    public ModelAndView toRole(){
        return new ModelAndView("system/role");
    }
    /**
     *@ 描述：獲取角色列表
     *@ 方法名：roleList
     *@ 参数：[pagination, recPerPage, page, search, sortBy, order]
     *@ 返回值类型：com.rui.cn.dto.RemotePage
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/28 0028-下午 15:18
     **/
    @RequestMapping(value = "/roleList")
    public RemotePage roleList(Page pagination, @RequestParam(defaultValue = "10",required = false)Integer recPerPage, @RequestParam(defaultValue = "1",required = false)Integer page,
                               String search, String sortBy, String order){
        pagination.setSize(recPerPage);
        pagination.setCurrent(page==0?1:page);
        Page<SysRole> userList=sysRoleService.roleList(pagination,search,sortBy,order);
        Pager pager=new Pager(pagination.getCurrent(),userList.getTotal(),pagination.getSize());
        RemotePage<SysRole> remotePage=new RemotePage<SysRole>("success","数据加载成功",userList.getRecords(),pager);
        return  remotePage;
    }
    /**
     *@ 描述：添加修改角色
     *@ 方法名：addOrupdate
     *@ 参数：[role]
     *@ 返回值类型：com.rui.cn.dto.JsonResult
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/28 0028-下午 16:26
     **/
    @RequestMapping("/addOrupdate")
    public JsonResult addOrupdate(SysRole role){
        boolean flag;
        if(role.getId()!=null) {
            flag = sysRoleService.updateById(role);
        }else {
            role.setCreatetime(DateUtils.getDateTimeNow());
            flag = sysRoleService.insert(role);
        }
        JsonResult jsonResult=new JsonResult(flag?1:0,"操作成功！");
        return jsonResult;
    }
    /**
     *@ 描述：角色详情
     *@ 方法名：getRoleInfo
     *@ 参数：[id]
     *@ 返回值类型：com.rui.cn.dto.JsonResult
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/28 0028-下午 16:33
     **/
    @RequestMapping("/getRoleInfo")
    public JsonResult getRoleInfo(Integer id){
        SysRole sysRole=sysRoleService.selectById(id);
        JsonResult jsonResult=new JsonResult(sysRole);
        return jsonResult;
    }
    /**
    *@ 描述：删除角色
    *@ 方法名：delRole
    *@ 参数：id
    *@ 返回值类型：com.rui.cn.dto.JsonResult
    *@ 创建人：[zhang]
    *@ 创建时间：2018/4/28 0028-下午 16:39
    **/
    @RequestMapping("/delRole")
    public JsonResult delRole(@RequestParam("id[]")Integer id[]){
        //删除角色
        boolean flag=sysRoleService.deleteBatchIds(Arrays.asList(id));
        //删除角色权限
        Map<String,Object> map=null;
        for (Integer roleid:id){
            map=new HashMap<>();
            map.put("roleid",roleid);
            sysRoleMenuService.deleteByMap(map);
            sysRolePermissionService.deleteByMap(map);

        }
        JsonResult jsonResult=new JsonResult(flag?1:0,"删除成功！");
        return jsonResult;
    }
    /**
     *@ 描述：获取角色的所有菜单
     *@ 方法名：getRoleMenu
     *@ 参数：[roleid]
     *@ 返回值类型：java.util.List<com.rui.cn.dto.TreeDto>
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/29 0029-下午 21:08
     **/
    @RequestMapping("/getRoleMenu")
    public List<TreeDto> getRoleMenu(Integer roleid){
        List<TreeDto> treeList = new ArrayList<TreeDto>();
        List<SysMenu> allMenus=sysMenuService.selectList();
        List<SysMenu> menuList=sysMenuService.getRoleMenu(roleid);
        for (SysMenu f:allMenus){
            TreeDto tree = new TreeDto();
            if(menuList.size()>0 && menuList != null){
                for(SysMenu menu : menuList){
                    if(menu == null){
                        continue;
                    }
                    if(f.getId().equals(menu.getId())){
                        tree.setChecked(true);
                    }
                }
            }
            tree.setId(f.getId());
            tree.setTitle(f.getTitle());
            tree.setParentid(f.getParentid());
            treeList.add(tree);
        }
        treeList.add(new TreeDto(0,-1,"系统菜单",false,true));
        return treeList;
    }
    /**
     *@ 描述：角色分配菜单
     *@ 方法名：saveRoleMenu
     *@ 参数：[ids,roleid]
     *@ 返回值类型：com.rui.cn.dto.JsonResult
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/29 0029-下午 22:40
     **/
    @RequestMapping("/saveRoleMenu")
    public JsonResult saveRoleMenu(@RequestParam("ids[]") Integer ids[],Integer roleid,Integer type){
        Integer row=0;
        if(type == 1){//分配菜单
             row=sysRoleMenuService.saveRoleMenu(ids,roleid);
        }else {//分配权限
            row=sysRolePermissionService.saveRolePermiss(ids,roleid);
        }
        return new JsonResult(row>0?1:0);
    }
    /**
     *@ 描述：获取角色的所有权限
     *@ 方法名：getRolePermiss
     *@ 参数：[roleid]
     *@ 返回值类型：java.util.List<com.rui.cn.dto.TreeDto>
     *@ 创建人：[zhang]
     *@ 创建时间：2018/4/29 0029-下午 23:59
     **/
    @RequestMapping("/getRolePermiss")
    public List<TreeDto> getRolePermiss(Integer roleid){
        List<TreeDto> treeList = new ArrayList<TreeDto>();
        treeList.add(new TreeDto(0,-1,"系统权限(只有查看的权限)",false,true));
        //所有的权限
        List<SysPermission> allPermiss=sysPermissionService.selectList();
        //角色对应所有的权限
        List<SysPermission> rolePermiss=sysPermissionService.getRolePermiss(roleid);
        for (SysPermission f:allPermiss){
            TreeDto tree = new TreeDto();
            if(rolePermiss.size()>0 && rolePermiss != null){
                for(SysPermission menu : rolePermiss){
                    if(menu == null){
                        continue;
                    }
                    if(f.getId().equals(menu.getId())){
                        tree.setChecked(true);
                    }
                }
            }
            tree.setId(f.getId());
            tree.setParentid(f.getParentid());
            tree.setTitle(f.getRemark()+"("+f.getPermission()+")");
            if (StringUtils.isBlank(f.getPermission())){
                tree.setNocheck(true);
                tree.setTitle(f.getRemark());
            }
            treeList.add(tree);
        }
        return treeList;
    }
}
